# 构建transform,对图像做处理,要和main里面的一致
my_transforms = transforms.Compose([transforms.ToTensor(),
                     transforms.Normalize(mean=(0.9471762,0.9478388,0.9475022), 
                                               std=(0.18795937, 0.18679644, 0.18724856))])
# 数字字符映射表
mapping = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
if __name__ == "__main__":
    # 模型实例化（传给gpu使用)
    model=ResNet(ResidualBlock,num_classes=4*9).to(DEVICE)
    # 加载模型
    model.load_state_dict(torch.load('./model.pkl',map_location= 'cpu'))
    # 打开图片
    image = Image.open('./data/captcha/test.png')
    # 对图片进行转换成PyTorch处理的tensor格式,并移动到模型所在设备上
    image = my_transforms(image)
    
    # 第一个参数 1 表示 batch size,即处理的图像数量为 1。
    # 第二个参数 3 表示图像有 3 个通道,即 RGB 三个通道。
    # 第三个参数 50 表示图像高度为 50 像素。
    # 第四个参数 150 表示图像宽度为 150 像素。
    image = image.view(1, 3, 50, 150).to(DEVICE)
    # 预测
    model.eval()
    # 不进行梯度计算
    with torch.no_grad():
        # 获取结果
        out_put = model(image)         
        # 参数4表示batch_size,即预测结果包含4个样本的预测值。
        # 参数9表示num_classes,即模型预测结果是9维的向量（分类)
        out_put = out_put.view(4, 9)

        result = out_put.max(dim=1)[1]
        # 对模型输出结果out_put在维度1上取最大值。

        print([mapping[i] for i in  list(result.cpu().numpy())])
        # numpy不能读取CUDA  tensor 需要将它转化为CPU tensor
